#include "link.h"

int main(int argc, const char *argv[]){
    node_t *phead = NULL; // 保存头结点的首地址
    // 创建头结点
    create_node(&phead, -1);
    printf("phead1 = %p\n", phead); // 非NULL
    
    node_t *phead2 = NULL;
    create_node(&phead2,-2);
    printf("phead2 = %p\n",phead2);

    // 测试头插
    insert_list_by_head(phead, 10);
    insert_list_by_head(phead, 20);
    insert_list_by_head(phead, 30);
    insert_list_by_head(phead, 40);
    print_list(phead); // 40 30 20 10

    // 测试尾插
    insert_list_by_tail(phead, 50);
    insert_list_by_tail(phead, 60);
    insert_list_by_tail(phead, 70);
    print_list(phead); // 40 30 20 10 50 60 70

    // 测试任意位置插入
    insert_list_by_pos(phead, 8, 100); // 报错 位置不合理
    insert_list_by_pos(phead, 7, 200);
    insert_list_by_pos(phead, 2, 300);
    print_list(phead); // 40 30 300 20 10 50 60 70 200

    // 测试头删
    delete_list_by_head(phead);
    delete_list_by_head(phead);
    delete_list_by_head(phead);
    print_list(phead); // 20 10 50 60 70 200

    // 测试尾删
    delete_list_by_tail(phead);
    delete_list_by_tail(phead);
    print_list(phead); // 20 10 50 60

    // 测试任意位置删除
    delete_list_by_pos(phead, 4); // 位置不合理  报错
    delete_list_by_pos(phead, 3);
    delete_list_by_pos(phead, 1);
    print_list(phead); // 20 50
/*
    clean_list(phead);
    print_list(phead);// 

    destroy_list(&phead);
    printf("phead = %p\n", phead);//nil
*/
    insert_list_by_tail(phead2,10);
    insert_list_by_tail(phead2,30);
    insert_list_by_tail(phead2,40);
    print_list(phead2);

    hebing_list(phead,&phead2);
    print_list(phead);//20 50 10 30 40
    printf("phead2 = %p\n",phead2);//null

    sort_list(phead);
    print_list(phead);// 10 20 30  40 50

    // 测试翻转
    overtrun_list(phead);
    print_list(phead);//50 40 30 20 10

    // 测试剔重
    insert_list_by_pos(phead, 2, 40);
    insert_list_by_tail(phead, 80);
    insert_list_by_tail(phead, 80);
    insert_list_by_pos(phead, 3, 10);
    print_list(phead); //50 40 40 10 30 20 10 80 80
    tichong_list(phead);
    print_list(phead);// 50 40 30 10 20 80


    
    return 0;
}